Describe in one word what you think this course is about
Goal: how to use a language to communicate with and instruct an information-processing agent
Computer Science notions: algorithms, data structures, and algorithmic techniques
Language for communication: Python (yes, it is a programming language)
Some whispers of despair:
algorithms, computations, programming, etc., are something which I cannot handle – indeed, I did not like mathematics at the high school
I am not able to abstract a situation by using formal tools since I am not a formal person
I cannot learn a programming language
These are just prejudices
Several of the things the book introduces are something that all of us already learned and digested during our life - it is only a matter of identifying them again to reuse them consciously
Intelligence is a muscle, it can be developed - we can learn anything, including Computer Science topics, despite what others say
More info in: Dweck, C. (2006). Mindset: The New Psychology of Success. Random USA. ISBN: 978-0345472328
A programming language is a language, such as Italian and English - we need time and practice to learn it properly
Suggested mindset: be an hackerone who enjoys the intellectual challenge of creatively overcoming or circumventing limitations
We don't trust you!
OK, then see what it (has) happened
Bachelor:
History
Bachelor:
Humanities
Bachelor:
Information Science for Management
Did some of you have experienced any of the following issues in the past? – Raise your hands if you were obliged:
to buy one or more books
to attend mandatorily a large part of the course for attending the final exam
not to participate to an exam session for some informal rule imposed by the professor
not to receive the maximum score if you attended the exam without attending the lectures
Let's see the rules of this course
Two free text books are provided, and additional material can be found on the GitHub repository of the course
If you cannot attend, do not attend (even if attendance is recommended: you can ask questions)
At least six exam sessions per academic year
Max score one can obtain is 42 (out of 30)
Computational Thinking and Programming book (official book of the course - it includes more than 100 exercises with keys!) + accompanying book How To Code in Python
All the material (including slides) is available in the GitHub repository of the course at https://github.com/comp-think/2020-2021/
Have you found a mistake in the official book? Please write me an email at silvio.peroni@unibo.it, or comment it directly on Google Docs
We use a Telegram group for communicating with each other
Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed, it is an open source software, and can be used in any device (it has been developed for mobile and desktop devices)
Invitation link to join the group:
https://t.me/joinchat/GrGmRRWkB6PqyuFPxRMovQ
The course has its own Twitter account: @UniboCompThink
Twitter will be used to highlight interesting articles and initiatives about computational thinking, and to share the various topics addressed during the course so as to provide the materials to anyone can be interested
We will use the GitHub repository of the course for a series of activities, such as exercises and raising issues
Thus, please, create a new account on GitHub: https://github.com/join
Once logged into GitHub, go to the issue page of the course repository, and then feel free to add and respond to issues there
A very introductory guide to GitHub can be find online
Theoretical part (30 hours), where I will introduce all the notions related to the course - no computer needed: 15 lectures of two hours each (today included)
Practical sessions, where Bruno Sartini will be available for helping you in the issues that may arise during the course (e.g. solving exercises) - use Telegram for coordination (e.g. topic to address and when)
Laboratorial part (16 hours), where Ivan Heibi will have some practical lectures on programming languages - computer needed here
Theory: it introduces the tools for doing something - e.g. vocabulary and syntax of a language
Practice: it addresses assignments to enable people to learn and understand the correct way to use such tools - e.g. using the language vocabulary and syntax to write sentences to express a particular idea or situation
Laboratory: a workshop run by someone that enables one to use the tools learned to understand advanced concepts and to build wonderful (and complex) artifacts - e.g. writing a novel
October | November | December | |||
---|---|---|---|---|---|
14/10/20 9:30-11:30 | Introduction to Computational Thinking | 09/11/20 9:30-11:30 | Organising information: unordered structures | 02/12/20 9:30-11:30 | Backtracking algorithms |
16/10/20 12:30-14:30 | Algorithms | 11/11/20 9:30-11:30 | Laboratory | 04/12/20 12:30-14:30 | Laboratory |
19/10/20 9:30-11:30 | Computability | 13/11/20 12:30-14:30 | Recursion | 09/12/20 9:30-11:30 | Organising information: graphs |
21/10/20 9:30-11:30 | Programming Languages | 16/11/20 9:30-11:30 | Laboratory | 11/12/20 12:30-14:30 | Laboratory |
23/10/20 12:30-14:30 | Laboratory | 20/11/20 12:30-14:30 | Divide and conquer algorithms | 14/12/20 9:30-11:30 | Project: specification |
26/10/20 9:30-11:30 | Organising information: ordered structures | 23/11/20 9:30-11:30 | Dynamic programming algorithms | 16/12/20 9:30-11:30 | Greedy algorithms |
28/10/20 9:30-11:30 | Laboratory | 25/11/20 9:30-11:30 | Laboratory | ||
30/10/20 12:30-14:30 | Brute-force algorithms | 27/11/20 12:30-14:30 | Organising information: trees | ||
30/11/20 9:30-11:30 | Laboratory |
Two partial written examinations – they are not mandatory, but recommended – held during the lectures (no dates defined, surprise surprise): score <= 5 for each examination (max. score: 10)
Implementation of a project in Python: score <= 8
Oral colloquium on the project: -8 <= score <= 8
Final written examination: score <= 16
Total max. score: 42 (32 without the partial written examinations) out of 30
Usually, during one of the last lectures of the course, you will be asked to fill-up a questionnaire on the organisation of the course and related stuff - it is anonymous, of course
Please, do it carefully and honestly, since it is one of the most important inputs I will have to understand what can be improved in the next year course
The fact that the course of this year is slightly different from the one held during the previous year one is mainly due to the comments I have received through these questionnaires
Do you think that attending only to all the classes of a 6 credit course (i.e. 30 hours) on a foreign language is enough to master its basics?
Learning a programming language is like learning a new language: you need to practice it (a lot) to master it properly
Umberto Eco (1980). The Name of the Rose. Available online
In the face of some inexplicable facts you must try to imagine many general laws, whose connection with your facts escapes you. Then suddenly [...] you perceive a line of reasoning that seems more convincing than the others. You try applying it to all similar cases [...] and you discover that your intuition was right.
There is no single solution to a given problem, and the best one can be found only trying (and making mistakes, and trying again and again) more than one approach
Stephen Toulmin (1958). The Uses of Arguments. Available online
The purpose of these studies is to raise problems, not to solve them
Please do ask questions
There are no stupid questions
My answers can be odd though, sometime
Thus, in order to avoid such odd answers, I could ask you to be patient and wait for the next lecture, so as to provide you with the best possible answer ever